package com.jf.cloud.service.sysmanager.common.util.qnImg;

import java.io.File;
import java.io.InputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.qiniu.api.auth.digest.Mac;
import com.qiniu.api.config.Config;
import com.qiniu.api.io.IoApi;
import com.qiniu.api.io.PutExtra;
import com.qiniu.api.io.PutRet;
import com.qiniu.api.rs.PutPolicy;

/**
 * 此demo为您展示了如何从客户端向七牛云存储上传一个本地文件。
 * 
 */
public class ImgCloud {
	static Log log = LogFactory.getLog(ImgCloud.class);
	public static final String bucketName = "i3yx"; // 七牛上的根目录
	
	static{
		Config.ACCESS_KEY = "D6_DFEfdOtCkdF4ljO78-K2iKvTkc5UEeTBIkY7i";
		Config.SECRET_KEY = "FUl5hJ7dAU_2I6rcx-rr1H7Kb0tcq7AUMWUB0_j0";
	}
    /**自定义路径 上传
     * fileName:最终的文件名称和后缀 :  xxxx.jpg
     * filePath:文件存在的目录  : /3yx/other/
     * @return
     */
	public static boolean up4FilePath(String fileName,String filePath,String needUpImgTempPath){
		return up(filePath+fileName, needUpImgTempPath) ;
	}
	public static boolean up4FilePath(String fileName,String filePath,String needUpImgTempPath,String CouldbucketName){
		return up(filePath+fileName, needUpImgTempPath,CouldbucketName) ;
	}
	public static boolean up4File(String fileFullName,File file ,String CouldbucketName){
		 return up(fileFullName,file.getPath(),CouldbucketName);
	}
	public static boolean up4File(String fileName,String filePath,File file){
		 return up4FilePath(fileName,filePath,file.getPath());
	}
	
	/**
	 * 上传图片至 云服务器
	 * fileFullName:文件名称 包含后缀
	 * imgTempPath:图片的存放路径 （服务器临时路径也可以）
	 * @return
	 */
	static boolean up(String fileFullName,String imgTempPath){
		return up(fileFullName, imgTempPath,bucketName);
	}
	/**
	 * ※※※   上传图片至 云服务器   ※※※ 
	 * fileFullName:文件名称 包含后缀和相对目录  (域名+这个地址可以访问到的地址) /3yx/other/xxxx.jpg
	 * needUpImgTempPath:需要上传的图片的存放路径 （服务器临时路径也可以） c://temp/xxx.jpg
	 * bucketName :云服务器空间 一般不需要这个参数
	 * @return
	 */
	static boolean up(String fileFullName,String needUpImgTempPath ,String CouldbucketName){
		try {
			log.info("start upload images needUpImgTempPath="+needUpImgTempPath +" fileFullName="+fileFullName +" CouldbucketName="+CouldbucketName);
			Mac mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
			String bucketName = CouldbucketName; 
			PutPolicy putPolicy = new PutPolicy(bucketName);
			String uptoken = putPolicy.token(mac);
			// 注：此处的key可以类比数据中表中的主键，此处用上传文件的文件名。
			String key = fileFullName;
			if(key.startsWith("/")){  // 去掉斜杠 root 路径 
				key = key.substring(1, key.length()); 
			}
			// 本地文件的绝对路径
			String localFile = needUpImgTempPath;
			// 可选的上传选项，具体说明请参见使用手册。
			PutExtra extra = new PutExtra();
			// 上传文件
			PutRet ret = IoApi.putFile(uptoken, key, localFile, extra);
			if (ret.ok()) {
				return true;
			} else {
				log.info(" ※※※  ※※※ ※※※  ※※※ error : " + ret);
				return false;
			}
		} catch (Exception e) {
			log.error(" ※※※  ※※※ 上传图片出错了！检查下token", e);
			e.printStackTrace();
		} 
		return false;
	}
	/**
	 * ※※※   上传图片至 云服务器   ※※※ 
	 * fileFullName:文件名称 包含后缀和相对目录  (域名+这个地址可以访问到的地址) /3yx/other/xxxx.jpg
	 * needUpImgTempPath:需要上传的图片的存放路径 （服务器临时路径也可以） c://temp/xxx.jpg
	 * bucketName :云服务器空间 一般不需要这个参数
	 * @return
	 */
	public static boolean up(String fileFullName,InputStream in){
		try {
			log.info("start upload images  fileFullName="+fileFullName );
			
			// 注：此处的key可以类比数据中表中的主键，此处用上传文件的文件名。
			String key = fileFullName;
			if(key.startsWith("/")){  // 去掉斜杠 root 路径 
				key = key.substring(1, key.length()); 
			}
			
			Mac mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
			PutPolicy putPolicy = new PutPolicy(bucketName+":"+key); // @roway 2016-01-14覆盖上传【上传代练宝客户端文件】
			String uptoken = putPolicy.token(mac);
			
			PutExtra extra = new PutExtra();
			// 上传文件
			PutRet ret = IoApi.Put(uptoken, key, in, extra);
			if (ret.ok()) {
				return true;
			} else {
				log.info(" ※※※  ※※※ ※※※  ※※※ error : " + ret);
				return false;
			}
		} catch (Exception e) {
			log.error(" ※※※  ※※※ 上传图片出错了！检查下token", e);
			e.printStackTrace();
		} 
		return false;
	}
	
/*	public static void main(String[] args) throws Exception {
		 Log4jConfig.reload();
		 System.out.println(up("24404","C:/Users/sun/Desktop/233.jpg"));
	}*/
}
